import sys
from PySide2.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QPushButton
from PySide2.QtGui import QPixmap, QTransform
from PySide2.QtCore import QTimer


class ImageLoader(QWidget):
    def __init__(self):
        super().__init__()

        # 初始化 UI
        self.initUI()
        # 初始旋转角度
        self.rotation_angle = 0
        # 定时器
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.rotate_image)
        # 控制旋转状态
        self.is_rotating = False

    def initUI(self):
        # 创建一个垂直布局
        layout = QVBoxLayout()

        # 加载图片
        self.pixmap = QPixmap(r"E:\泸州调查队居民收支科\居民收支科_win7\forms\res\img\loading.png")  # 替换为你实际的图片路径

        # 检查图片是否成功加载
        if self.pixmap.isNull():
            print("无法加载图片")
        else:
            # 创建一个 QLabel 用于显示图片
            self.label = QLabel(self)
            self.label.setPixmap(self.pixmap)

            # 创建一个按钮用于开始/停止旋转图片
            self.rotate_button = QPushButton('开始旋转', self)
            self.rotate_button.clicked.connect(self.toggle_rotation)

            # 将 QLabel 和按钮添加到布局中
            layout.addWidget(self.label)
            layout.addWidget(self.rotate_button)

        # 设置窗口的布局
        self.setLayout(layout)

        # 设置窗口的标题和大小
        self.setWindowTitle('图片加载与旋转示例')
        self.setGeometry(300, 300, 400, 300)

    def toggle_rotation(self):
        if self.is_rotating:
            # 停止旋转
            self.timer.stop()
            self.rotate_button.setText('开始旋转')
        else:
            # 开始旋转
            self.timer.start(50)  # 每 100 毫秒旋转一次，可按需调整
            self.rotate_button.setText('停止旋转')
        self.is_rotating = not self.is_rotating

    def rotate_image(self):
        # 每次旋转 10 度，可按需调整
        self.rotation_angle += 10
        if self.rotation_angle >= 360:
            self.rotation_angle = 0

        # 创建一个 QTransform 对象并设置旋转角度
        transform = QTransform().rotate(self.rotation_angle)
        # 应用变换到 QPixmap
        rotated_pixmap = self.pixmap.transformed(transform)

        # 更新 QLabel 显示旋转后的图片
        self.label.setPixmap(rotated_pixmap)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ImageLoader()
    ex.show()
    sys.exit(app.exec_())